package com.fivefu.core.skyeye.event.services;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.fivefu.core.skyeye.event.entity.DbAiSceneCamera;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 探头场景关联表 服务类
 * </p>
 *
 * @author 
 * @since 2022-07-15 13:53:19
 */
public interface DbAiSceneCameraService extends IService<DbAiSceneCamera> {

    /**
     * 通过场景唯一标识和探头唯一标识查询关联信息
     * @param sceneId  场景唯一标识
     * @param cameraId 探头唯一标识
     * @return
     */
    DbAiSceneCamera querySceneCamera(String sceneId, String cameraId);

    /**
     * 通过场景唯一标识和探头唯一标识查询未删除的关联信息
     * @param sceneId 场景唯一标识
     * @param cameraId 探头唯一标识
     * @return
     */
    DbAiSceneCamera getSceneCamera(String sceneId, String cameraId);

    /**
     * 查询场景探头关联信息
     * @param sceneCamera
     * @return
     */
    Map<String, Object> formatSceneCamera(DbAiSceneCamera sceneCamera);

    /**
     * 分页获取场景探头列表
     * @param cameraCode 场景唯一标识
     * @param page
     * @param limit
     * @return
     */
    Page<DbAiSceneCamera> querySceneCameraByPage(String cameraCode, Integer page, Integer limit);

    /**
     * 编辑场景探头
     * @param sceneCamera 场景探头信息
     * @param userid      操作用户编号
     * @return
     */
    boolean editSceneCamera(DbAiSceneCamera sceneCamera, String userid);

    /**
     * 能否进行编辑场景探头
     * @param sceneCamera 场景探头信息
     * @param sliceMaxNum 切片最大值
     * @param eventMaxNum 识别节点最大值
     * @return
     */
    boolean isEditSceneCamera(DbAiSceneCamera sceneCamera,Integer sliceMaxNum,Integer eventMaxNum);

    /**
     * 开启、关闭场景探头
     * @param id     场景探头编号
     * @param userid 用户编号
     * @param enable 是否启用(0:否 1:启用)
     * @return
     */
    void enableSceneCamera(Long id, String userid, Integer enable);

    /**
     * 删除场景探头
     * @param id     场景探头编号
     * @param userid 用户编号
     */
    void deleteSceneCamera(Long id, String userid);

    /**
     * 通过编号查询场景探头信息
     * @param id 场景探头编号
     * @return
     */
    DbAiSceneCamera querySceneCameraByID(Long id);

    /**
     * 根据开启的场景标识查询开启的探头集
     * @param sceneCodeList 场景编号集合
     * @param sliceCodeList 切片机器集合
     * @return
     */
    List<DbAiSceneCamera> getOpenCamera(List<String> sceneCodeList, List<String> sliceCodeList);

    /**
     * 通过场景标识查询场景下探头编号集合
     * @param sceneCode 场景标识
     * @param enable    是否开启;0:否,1:是
     * @return
     */
    List<String> queryCameraCodeBySceneID(String sceneCode, Integer enable);

    /**
     * 查询场景下的开启探头
     * @param sceneList 场景唯一标识
     * @return
     */
    List<String> getCamera(List<String> sceneList);

    /**
     * 查询切片机器数量信息
     * @return
     */
    List<Map<String, Object>> querySliceNodeCount();


    /**
     * 查询识别机器数量信息
     * @return
     */
    List<Map<String, Object>> queryEventNodeCount();

    /**
     * 查询已使用切片的数量
     * @param sliceId 切片编号
     * @return
     */
    Integer querySliceNodeNum(Long sliceId);

    /**
     * 查询已使用识别的数量
     * @param eventId 识别编号
     * @return
     */
    Integer queryEventNodeNum(Long eventId);

    /**
     * 查询未删除的场景探头
     * @return
     */
    List<DbAiSceneCamera> querySceneCameras();

    /**
     * 根据探头标识查询切片节点编号
     * @param cameraCode 探头唯一标识
     * @return
     */
    DbAiSceneCamera querySliceNodeByCamera(String cameraCode);

    /**
     * 通过场景唯一标识获取场景探头关联集合
     * @param sceneIds 场景唯一标识集合
     * @return
     */
    List<DbAiSceneCamera> querySceneCameraList(List<String> sceneIds);

    /**
     * 通过场景唯一标识或探头唯一标识查询关联信息
     * @param sceneId 场景唯一标识
     * @param cameraId 探头唯一标识
     * @return
     */
    List<DbAiSceneCamera> querySceneCameraList(String sceneId, String cameraId);

}
